package com.dolphin.aiagentplatform.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * agent_model表
 */
@TableName(value = "agent_model")
@Data
public class AgentModel implements Serializable {

    private static final Logger logger = LoggerFactory.getLogger(AgentModel.class);
    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 模型ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 模型名称
     */
    private String name;

    /**
     * 模型别名，JSON字符串格式
     */
    private String alias;

    /**
     * 解析别名列表（非持久化字段）
     */
    @TableField(exist = false)
    private List<String> parsedAlias;

    /**
     * 模型描述
     */
    private String description;

    /**
     * 供应商
     */
    private String provider;

    /**
     * API端点
     */
    private String apiUrl;

    /**
     * 启用状态(0-禁用 1-启用)
     */
    private Integer enabled;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 逻辑删除(0-正常 1-删除)
     */
    private Integer isDelete;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    /**
     * 获取解析后的别名列表
     *
     * @return 别名列表
     */
    public List<String> getAliasList() {
        if (parsedAlias != null) {
            return parsedAlias;
        }

        parsedAlias = new ArrayList<>();
        if (alias == null || alias.trim().isEmpty()) {
            return parsedAlias;
        }

        try {
            // 尝试解析JSON数组
            if (alias.trim().startsWith("[") && alias.trim().endsWith("]")) {
                parsedAlias = objectMapper.readValue(alias, List.class);
            } else {
                // 如果不是JSON数组，按逗号分隔
                parsedAlias = Arrays.asList(alias.split(","));
            }
        } catch (Exception e) {
            logger.error("解析别名字符串失败: {}", e.getMessage());
            // 解析失败时，将整个字符串作为一个别名
            parsedAlias = new ArrayList<>();
            parsedAlias.add(alias);
        }

        return parsedAlias;
    }

    /**
     * 设置别名列表并转换为JSON字符串
     *
     * @param aliasList 别名列表
     */
    public void setAliasList(List<String> aliasList) {
        this.parsedAlias = aliasList;
        try {
            this.alias = objectMapper.writeValueAsString(aliasList);
        } catch (JsonProcessingException e) {
            logger.error("转换别名列表为JSON字符串失败: {}", e.getMessage());
            // 转换失败时使用逗号连接
            this.alias = String.join(",", aliasList);
        }
    }
}